
public class FindTheLonelyBoxAGoal {
	public FindTheLonelyBoxAGoal(){}
	
	public void findTHeLonelyBoxAGoal(Board board, int width, int height){
		Cord[] boxes = board.getBoxes();
		for(int b = 0; b<boxes.length;b++){
			int x = boxes[b].getX();
			int y = boxes[b].getY();
			int goal = 0;
			int GoalX = 0;
			int GoalY = 0;
			boolean left = false, right = false, up = false, down = false;
			boolean isWalled = true;
			//Åt vilket håll är väggen lådan står mot?
			if(board.getCellType(x+1, y).isWall()){
				right = true;
			}
			if(board.getCellType(x-1, y).isWall()){
				left = true;
			}
			if(board.getCellType(x, y+1).isWall()){
				down = true;
			}
			if(board.getCellType(x, y-1).isWall()){
				up = true;
			}
			//Om lådan står mot höger eller vänster vägg.
			if(right || left){
				System.out.println("Låda nummer: "+(b+1)+" Right: "+right+" Left: "+left);
				goal = 0;
				int bottom = 0;
				int top = 0;
				for(int ycord = boxes[b].getY();ycord<height;ycord++){
					if(board.getCellType(x, ycord).isWall()){
						top = ycord;
						break;
					}
				}
				for(int ycord = boxes[b].getY();ycord>0;ycord--){
					if(board.getCellType(x, ycord).isWall()){
						bottom = ycord;
						break;
					}
				}
				//System.out.println("Är top och bottom initierade? "+top+" "+bottom);
				for (int i = bottom; i < top; i++){
					if(board.getCellType(x, i).isGoal()){
						goal++;
						GoalX = x;
						GoalY = i;
					}
				}
				//System.out.println("Antal mål: "+goal);
				if (goal == 1){
					if(right){
						for (int i = bottom; i < top; i++){
							if(!board.getCellType(x+1, i).isWall()){
								isWalled = false;
							}
						}
					}
					if(left){
						for (int i = bottom; i < top; i++){
							if(!board.getCellType(x-1, i).isWall()){
								isWalled = false;
							}
						}
					}
					if(isWalled){
						System.out.println("Lådan på " +boxes[b].getX()+"/"+boxes[b].getY()+" kan bara nå målet på: "+GoalX+"/"+GoalY);
						System.out.println();
					}
					else{
						System.out.println("Lådan på " +boxes[b].getX()+"/"+boxes[b].getY()+" kan röra sig fritt");
						System.out.println();
					}
				}
			}
			//Om lådan står mot upp eller ner vägg.
			else if(up || down){
				System.out.println("Låda nummer: "+(b+1)+" Up: "+up+" Down: "+down);
				goal = 0;
				int bottom = 0;
				int top = 0;
				for(int xcord = boxes[b].getX();xcord<width;xcord++){
					if(board.getCellType(xcord, y).isWall()){
						top = xcord;
						break;
					}
				}
				for(int xcord = boxes[b].getX();xcord>0;xcord--){
					if(board.getCellType(xcord, y).isWall()){
						bottom = xcord;
						break;
					}
				}
				//System.out.println("Är top och bottom initierade? "+top+" "+bottom);
				for (int i = bottom; i < top; i++){
					if(board.getCellType(i, y).isGoal()){
						goal++;
						GoalX = i;
						GoalY = y;
					}
				}
				//System.out.println("Antal mål: "+goal);
				if (goal == 1){
					if(up){
						for (int i = bottom; i < top; i++){
							if(!board.getCellType(i, y-1).isWall()){
								isWalled = false;
							}
						}
					}
					if(down){
						for (int i = bottom; i < top; i++){
							if(!board.getCellType(i, y+1).isWall()){
								isWalled = false;
							}
						}
					}
					if(isWalled){
						System.out.println("Lådan på " +boxes[b].getX()+"/"+boxes[b].getY()+" kan bara nå målet på: "+GoalX+"/"+GoalY);
						System.out.println();
					}
					else{
						System.out.println("Lådan på " +boxes[b].getX()+"/"+boxes[b].getY()+" kan röra sig fritt");
						System.out.println();
					}
				}
			}
			else{
				System.out.println("Låda nummber "+(b+1)+" på koordinat "+boxes[b].getX()+"/"+boxes[b].getY()+" står fritt");
				System.out.println();
			}
		}
	}
}
